package interfaces;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import controle.Controle;

/**
 * 
 * Classe InterfaceInicial.java que representa a interface ao inciar o jogo, com
 * suas opções iniciais e configurações
 * 
 * @desc Projeto BombarJ
 * @author Simone Carneiro Streitenberger 11888 CCO2003
 * @author Thiago Nascimento Comicio 11889 CCO2003
 * @professor Edison de Jesus
 * @disciplina Computação Gráfica 2 - CCO812
 * 
 */
public class InterfaceInicial implements ActionListener {

	// objeto de controle
	private Controle controle;

	// componentes do painel inicial
	private JPanel painelInicial = null;

	private JPanel painelConfiguracao = null;

	private JPanel painelCreditos = null;

	private JTextField txtConfigNomeJogador;

	private JComboBox cmbConfigNivel;

	private JButton btnConfigOK;

	private JButton btnInicioIniciar;

	private JButton btnInicioConfig;

	private JButton btnInicioAjuda;

	private JButton btnInicioSair;

	private JButton btnInicioCreditos;

	private JButton btnCreditosVoltar;

	private PainelAjuda painelAjuda;

	/**
	 * 
	 * Método que tem por função retornar o painel incial com seus objetos e
	 * opções para configuração e incialização do jogo
	 * 
	 * @return Painel com interface inicial do jogo
	 * 
	 */
	public JPanel getPainelInicial() {
		// cria o painel com a interface inicial
		if (painelInicial == null) {
			// instancia e seta as principais características
			painelInicial = new JPanel();
			painelInicial.setLayout(null);

			painelInicial.setPreferredSize(new Dimension(800, 600));

			// instancia os elementos do painel
			btnInicioAjuda = new JButton("Ajuda");
			btnInicioIniciar = new JButton("Iniciar");
			btnInicioConfig = new JButton("Configurar");
			btnInicioSair = new JButton("Sair");
			btnInicioCreditos = new JButton("Créditos");

			// seta as posições e tamanhos dos objetos
			btnInicioConfig.setBounds(50, 50, 100, 25);
			btnInicioIniciar.setBounds(50, 90, 100, 25);
			btnInicioAjuda.setBounds(50, 130, 100, 25);
			btnInicioCreditos.setBounds(50, 170, 100, 25);
			btnInicioSair.setBounds(50, 210, 100, 25);

			// seta os botões como transparentes
			btnInicioConfig.setContentAreaFilled(false);
			btnInicioIniciar.setContentAreaFilled(false);
			btnInicioAjuda.setContentAreaFilled(false);
			btnInicioCreditos.setContentAreaFilled(false);
			btnInicioSair.setContentAreaFilled(false);

			// seta a cor da escrita dos botões
			btnInicioConfig.setForeground(Color.WHITE);
			btnInicioIniciar.setForeground(Color.WHITE);
			btnInicioAjuda.setForeground(Color.WHITE);
			btnInicioCreditos.setForeground(Color.WHITE);
			btnInicioSair.setForeground(Color.WHITE);

			// adiciona um captador de eventos aos botões
			btnInicioConfig.addActionListener(this);
			btnInicioIniciar.addActionListener(this);
			btnInicioAjuda.addActionListener(this);
			btnInicioCreditos.addActionListener(this);
			btnInicioSair.addActionListener(this);

			// deixa o painel de configuração invisível
			getPainelConfiguracao().setVisible(false);
			painelInicial.add(getPainelConfiguracao());

			// deixa o painel de créditos invisível
			getPainelCreditos().setVisible(false);
			painelInicial.add(getPainelCreditos());

			// adiciona o painel de ajuda
			painelAjuda = new PainelAjuda();
			painelAjuda.setBounds(25, 30, 362, 376);
			painelAjuda.setVisible(false);
			painelAjuda.getBtnVoltar().addActionListener(this);
			painelInicial.add(painelAjuda);

			// adiciona os objetos ao painel
			painelInicial.add(btnInicioConfig);
			painelInicial.add(btnInicioIniciar);
			painelInicial.add(btnInicioAjuda);
			painelInicial.add(btnInicioCreditos);
			painelInicial.add(btnInicioSair);

			// coloca uma imagem de fundo
			JLabel background = new JLabel(new ImageIcon(
					"imagens/telaIncial.jpg"));
			background.setBounds(0, 0, 800, 600);

			painelInicial.add(background);

		}

		return painelInicial;
	}

	/**
	 * 
	 * Método que tem por função criar o painel de configuração
	 * 
	 * @return Painel de configuração do jogo
	 * 
	 */
	public JPanel getPainelConfiguracao() {
		if (painelConfiguracao == null) {
			// são setados os objetos de configuração
			// como o combo com os níveis e o campo com o nome do usuário
			String niveis[] = { "Fácil", "Médio", "Difícil" };
			JLabel labelNivel = new JLabel("Escolha o nível");
			JLabel labelNome = new JLabel("Nome do jogador");

			// seta as características do painel
			painelConfiguracao = new JPanel();
			painelConfiguracao.setLayout(null);
			painelConfiguracao.setOpaque(false);
			painelConfiguracao.setBounds(25, 30, 200, 200);

			// seta as características
			txtConfigNomeJogador = new JTextField("Jogador");
			cmbConfigNivel = new JComboBox(niveis);
			btnConfigOK = new JButton("OK");

			// adiciona o captador de eventos ao botão
			btnConfigOK.addActionListener(this);

			// seta as características dos objetos de configuração
			labelNome.setForeground(Color.WHITE);
			labelNome.setBounds(0, 0, 100, 25);
			txtConfigNomeJogador.setBounds(0, 20, 150, 20);
			labelNivel.setForeground(Color.WHITE);
			labelNivel.setBounds(25, 50, 100, 25);
			cmbConfigNivel.setBounds(25, 70, 100, 25);
			btnConfigOK.setBounds(25, 110, 100, 25);

			btnConfigOK.setContentAreaFilled(false);
			btnConfigOK.setForeground(Color.WHITE);

			txtConfigNomeJogador.setOpaque(false);
			txtConfigNomeJogador.setForeground(Color.WHITE);

			cmbConfigNivel.setBackground(new Color(102, 98, 182));
			cmbConfigNivel.setForeground(Color.WHITE);

			// adiciona os objetos no painel
			painelConfiguracao.add(labelNome);
			painelConfiguracao.add(txtConfigNomeJogador);
			painelConfiguracao.add(labelNivel);
			painelConfiguracao.add(cmbConfigNivel);
			painelConfiguracao.add(btnConfigOK);
		}

		return painelConfiguracao;
	}

	/**
	 * 
	 * Método que tem por função criar o painel de créditos do jogo
	 * 
	 * @return Painel que contém os créditos do jogo.
	 * 
	 */
	public JPanel getPainelCreditos() {
		if (painelCreditos == null) {
			// instancia os objetos
			painelCreditos = new JPanel();
			painelCreditos.setLayout(null);
			painelCreditos.setOpaque(false);
			painelCreditos.setBounds(25, 30, 300, 200);

			// seta as características dos objetos
			btnCreditosVoltar = new JButton("<< Voltar");
			btnCreditosVoltar.addActionListener(this);
			btnCreditosVoltar.setBounds(25, 150, 100, 25);
			btnCreditosVoltar.setContentAreaFilled(false);
			btnCreditosVoltar.setForeground(Color.WHITE);

			// adiciona os componentes
			JLabel lblTemp;

			lblTemp = new JLabel("Simone Carneiro Streitenberger");
			lblTemp.setBounds(0, 40, 250, 100);
			lblTemp.setForeground(Color.WHITE);
			painelCreditos.add(lblTemp);

			lblTemp = new JLabel("Thiago Nascimento Comicio");
			lblTemp.setBounds(0, 60, 250, 100);
			lblTemp.setForeground(Color.WHITE);
			painelCreditos.add(lblTemp);

			lblTemp = new JLabel("Desenvolvedores");
			lblTemp.setForeground(Color.black);
			lblTemp
					.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 20));
			lblTemp.setBounds(new java.awt.Rectangle(9, 6, 129, 26));
			lblTemp.setBounds(0, 0, 250, 100);
			painelCreditos.add(lblTemp);

			painelCreditos.add(btnCreditosVoltar);
		}

		return painelCreditos;
	}

	/**
	 * 
	 * Método que tem por função retornar o nome do jogador, setado no painel de
	 * configurações
	 * 
	 * @return Nome do jogador
	 * 
	 */
	public String getNomeJogador() {
		return txtConfigNomeJogador.getText();
	}

	/**
	 * 
	 * Método que tem por função retornar o nível selecionado pelo jogador
	 * 
	 * @return Nível do jogo.
	 * 
	 */
	public int getNivel() {
		return cmbConfigNivel.getSelectedIndex();
	}

	/**
	 * 
	 * Método que tem por função conectar a interface ao objeto que controla o
	 * jogo.
	 * 
	 * @param controle
	 *            Objeto que controla o jogo.
	 * 
	 */
	public void conectaControle(Controle controle) {
		this.controle = controle;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
	 */
	public void actionPerformed(ActionEvent e) {
		// verifica qual dos botões foi pressionado e atribui ações
		if (e.getSource() == btnInicioCreditos) {
			// exibe o painel de créditos e deixa os outros componentes
			// invisíveis
			getPainelCreditos().setVisible(true);
			btnInicioAjuda.setVisible(false);
			btnInicioConfig.setVisible(false);
			btnInicioIniciar.setVisible(false);
			btnInicioCreditos.setVisible(false);
			btnInicioSair.setVisible(false);
		} else if (e.getSource() == btnInicioAjuda) {
			// exibe o painel de ajuda e deixa os outros componentes
			// invisíveis
			painelAjuda.setVisible(true);
			btnInicioAjuda.setVisible(false);
			btnInicioConfig.setVisible(false);
			btnInicioIniciar.setVisible(false);
			btnInicioCreditos.setVisible(false);
			btnInicioSair.setVisible(false);
		} else if (e.getSource() == btnInicioConfig) {
			// exibe o painel de configuração e deixa os outros componentes
			// invisíveis
			getPainelConfiguracao().setVisible(true);
			btnInicioAjuda.setVisible(false);
			btnInicioConfig.setVisible(false);
			btnInicioIniciar.setVisible(false);
			btnInicioCreditos.setVisible(false);
			btnInicioSair.setVisible(false);
		} else if ((e.getSource() == btnConfigOK)
				|| (e.getSource() == btnCreditosVoltar)
				|| (e.getSource() == painelAjuda.getBtnVoltar())) {
			// exibe os componentes padrões e deixa os painéis de configuração,
			// ajuda e créditos invisíveis
			getPainelConfiguracao().setVisible(false);
			getPainelCreditos().setVisible(false);
			painelAjuda.setVisible(false);
			btnInicioAjuda.setVisible(true);
			btnInicioConfig.setVisible(true);
			btnInicioIniciar.setVisible(true);
			btnInicioCreditos.setVisible(true);
			btnInicioSair.setVisible(true);
		} else if (e.getSource() == btnInicioIniciar) {
			// inicializa o jogo
			controle.apresentaTelaFasesInicial();
		} else if (e.getSource() == btnInicioSair) {
			// sai do jogo para o sistema
			System.exit(0);
		}
	}
}
